草庐IT

c++ - std::decay 和 std::remove_reference 之间的区别

全部标签

c - Win32 中的 TIB 访问

深入研究与TIB(线程信息block)一起工作的Win32API函数的实现,例如:TLS访问函数:TlsAlloc、TlsFree、TlsSetValue、TlsGetValueGetLastError,SetLastError消息子系统:GetMessage、PeekMessage等通过读取fs:[0x18]选择器的内容,我们发现它们都访问了TIB,有时称为TEB(线程环境block)。OTOH这是不必要的,因为fs寄存器直接指向它。根据thisarticle我在实践中看到的是,fs寄存器保存了TIB结构开头的地址,而在偏移量0x18处它有一个指向自身的指针。间接访问TIB的原因可能

c++ - 是否可以使用内存缓冲区(或 PE 资源)来支持只读 SQLite 数据库?

我想使用Windows的“自定义资源”功能将存储在SQLite数据库中的相当大的数据block嵌入到我的二进制文件中。(这是一个日志记录工具的白名单)SQLite确实支持inmemorydatabases,但看起来这可能仅限于创建全新的数据库;并且似乎不支持从内存缓冲区读取;但我并不肯定。数据库是否支持这样的东西?(由于其他原因我必须嵌入SQLite,所以将它用于白名单也很棒......) 最佳答案 sqlite文档在线备份部分http://www.sqlite.org/backup.html有一些代码可以做你想做的事(即将内存数据

无法使用 fopen 读取 UTF8 编码的文件(文件, "r,ccs=UTF-8")

在使用fopen打开文件时,我使用ccs=encoding(如MSDN中所述)将编码设置为UTF-8。当写入文件时它工作正常wchar_t*unicode_text=L"こんにちは";FILE*f=fopen("C:\\test.txt","w,ccs=UTF-8");fwprintf(f,L"%s\n",unicode_text);fclose(f);当我在文本编辑器中打开文件时,unicode会正常显示。但是当尝试从创建的文件中读取时,未检测到UTF-8编码:wchar_tbuffer[1000];FILE*f=fopen("C:\\test.txt","r,ccs=UTF-8")

c++ - 在 dll 之间使用 STL 时遇到问题

我在一个dll中有一个vector(或字符串),通过它的引用或指针在另一个dll中修改它是否安全,例如将新成员推送到vector或更改字符串的值?不知何故,当我这样做时有时会发生崩溃,我不知道为什么。如果我只是在另一个dll中读取它,使用const指针或引用,它绝对安全吗?使用STLport怎么样?更安全吗? 最佳答案 如果你修改一个STL容器,删除或添加新元素到它,它通常涉及分配/取消分配内存。如果碰巧您使用驻留在一个DLL中的分配器分配了一些内存,然后在另一个DLL中释放内存-使用另一个分配器,驻留在另一个DLL中-那么您可能会

c - 如何在静态控件中画线?

我想在静态控件中画一条线:caseWM_CREATE:{hgraph=CreateWindow(WC_STATIC,NULL,WS_CHILD|WS_VISIBLE|SS_CENTER,20,20,660,80,hWnd,NULL,NULL,NULL);SendMessage(hgraph,WM_SETTEXT,NULL,(LPARAM)"MyStatic");break;}caseWM_PAINT:{hdc=GetDC(hgraph);hp=CreatePen(0,5,RGB(0,100,0));SelectObject(hdc,hp);MoveToEx(hdc,0,0,0);Lin

c++ - Windows XP 和 Windows 7 之间的 DCOM 互操作性

我正面临一个相当奇怪且非常具体的DCOM相关问题,我希望有人可能遇到并解决了它。我正在尝试在Windows7机器(称之为W7)上的EXE服务器中实例化一个COM对象。客户端驻留在WindowsXP机器上(称之为WXP)。在WXP上,登录用户是域用户。在W7上,用户是本地用户。我已经(afaik)正确设置了所有DCOM权限、身份验证和帐户权限。不涉及防火墙。我得到的只是COMEXE服务器进程在W7上启动,使用我期望的用户名,但似乎甚至没有达到它的WinMain函数并且保持挂起并且永远不会死,除非我杀死它。我可以将远程调试器(VisualStudio2010)附加到它,它会警告我进程可能已

c - 为什么DDK可以成功编译一个无效的源文件?

首先,你可以通过DDKbuildutility成功编译如下main.c。#includeNTSTATUSDriverEntry(PDRIVER_OBJECT,PUNICODE_STRING){try{leave;}except(1){}return0;}但是,请注意:“leave”和“except”都不是有效的C语言关键字。我知道__leave和__except(即带有双前导下划线)都是微软特定的关键字来扩展C语言,但“leave”和“except”不是。我还确认“leave”和“except”不是由宏定义的。MSDN对此没有任何解释。谁能给我解释一下?提前致谢。

c# - 使用 SED 提取 XML 标签之间的值

我正在从服务器接收以下格式的数据:gin1601DepthOfBook如何从此字符串中提取值1601?我一直在尝试以下操作,但我迷失了正确的SED语法:sed-n"/sessionId/,/\/sessionId/p"sed-e"s/如何提取这个值(当字符串是一个长的多行字符串时,通常是两个XML标记之间的值)?谢谢。 最佳答案 这可能对你有用(GNUsed):sed'//!d;s//\n/;s/[^\n]*\n//;:a;$!{//!N;//!ba};y/\n//;s//\n/;P;D'file

c - 我的应用程序中的 ANSI C : how can I include and then extract . exe 文件(将 .exe 打包成 .exe)?

我正在编写一个创建Windows服务的程序。所以我需要两个.exe文件——一个用于程序,创建服务,另一个用于服务本身。但是我想将这两个文件合二为一。我有以下想法-打开.exe文件,我想在文本编辑器中打包(服务应用程序),然后将其内容复制到某个字符串。然后我需要在所需目录中创建一个空的.exe文件并将字符串写入该文件。但我想这不是一个好主意。解决我的问题的最佳方法是什么?提前致谢。 最佳答案 为了好玩,我写了一个使用您的方法的“启动器”程序。它有效,我使用zoomin.exe作为有效载荷对其进行了测试。创建启动器可执行文件后,在Not

windows - IUpdateSearcher 的搜索条件中的 "IsPresent=1"和 "IsInstalled=1"有什么区别

我正在尝试使用IUpdateSearcher接口(interface)的搜索方法的WUAAPI检索Windows更新。我已将搜索条件传递为“IsInstalled=1或IsPresent=1”。请在下面找到示例代码。IUpdateSearcher*searcher;ISearchResult*results;/*..CodetoinitializeCOMandgetUpdateSearcher*/..*/hRes=searcher->Search("IsInstalled=1orIsPresent=1",&results);我已经在MSDN中查看了IsInstalled和IsPrese